﻿// ## 2023/10/15 # 氕氘氚 # 剥离加强版出贼  ##
// ## 2020/07/21 # 氕氘氚 # 整合合了原版出贼和加强版出贼  ##

namespace 每月出贼概率
{
	const int 出贼治安 = 80;
	const bool 电脑不出贼 = true;

	///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	
	class Main
	{

		Main()
		{
			pk::set_func(158, pk::func158_t(callback));
		}

		int callback(pk::city@ city)
		{
			// 前6回合不出贼
			if (pk::get_elapsed_months() <= 12)
				return 0;

			// 电脑不出贼  2020/7/17 氕氘氚
			if (!city.is_player() && 电脑不出贼)
				return 0;

			// 不重複出贼
			int city_id = city.get_id();
			// 이 콜백은 도시 별로 호출되기 때문에 맵 상에 건물이 많을 수록 리스트로 접근하면 속도가 느려지므로 배열로 변환.
			array<pk::building@> arr = pk::list_to_array(pk::get_building_list());
			for (int i = 0; i < int(arr.length); i++)
			{
				pk::building@ building = arr[i];
				if (pk::get_city_id(building.get_pos()) == city_id and (building.facility == 设施_根据地1 or building.facility == 设施_根据地2))
					return 0;
			}

			// 치안이 기준치 이상일 경우 발생하지 않음
			if (int(city.public_order) >= 出贼治安 - (ch::has_skill(pk::city_to_building(city), 特技_威压) ? pk::core::skill_constant_value(特技_威压) : 0))
				return 0;

			// 기준치 미만일 경우 확률 계산
			return (100 - city.public_order) / 3;
		}

		///	<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	}

	Main main;
}
